package com.easthome.service.impl;

import com.easthome.entity.PageResult;
import com.easthome.entity.QueryPageBean;
import com.easthome.mapper.CheckGroupMapper;
import com.easthome.pojo.CheckGroup;
import com.easthome.service.CheckGroupService;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.HashMap;
import java.util.List;

@Service
public class CheckGroupServiceImpl implements CheckGroupService {
    @Autowired
    private CheckGroupMapper checkGroupMapper;

    /**
     * 添加检查组
     * 需要写入两个表的数据
     *
     * @param checkItemIds
     * @param checkGroup
     * @return
     */
    @Override
    @Transactional//spring事务注解 要么全成功 要么全失败
    public void addCheckGroup(Integer[] checkItemIds, CheckGroup checkGroup) {
        checkGroupMapper.addCheckGroup(checkGroup);
        addCheckGroupAndCheckItem(checkItemIds, checkGroup);
    }

    /**
     * 检查组分页查询
     * 请求参数：分页查询条件
     */
    @Override
    public PageResult queryCheckGroupPage(QueryPageBean queryPageBean) {
        // 分页查询
        PageHelper.startPage(queryPageBean.getCurrentPage(), queryPageBean.getPageSize());
        Page<CheckGroup> page = checkGroupMapper.queryCheckGroupPage(queryPageBean.getQueryString());
        PageResult pageResult = new PageResult();
        pageResult.setTotal(page.getTotal());
        pageResult.setRows(page.getResult());
        return pageResult;
    }

    /**
     * 根据检查组id查询检查组
     * @param id
     * @return
     */
    @Override
    public CheckGroup checkGroupById(Integer id) {
        return checkGroupMapper.checkGroupById(id);
    }

    /**
     * 根据检查组id查询检查项ids
     * @param id
     * @return
     */
    @Override
    public List<Integer> queryCheckItemsByCheckGroupId(Integer id) {
        return checkGroupMapper.queryCheckItemsByCheckGroupId(id);
    }

    /**
     * 编辑检查组
     * 编辑对应的检查项
     * @param checkItemIds
     * @param checkGroup
     */
    @Override
    @Transactional
    public void editCheckGroup(Integer[] checkItemIds, CheckGroup checkGroup) {
       //先对checkGroup进行更新
        checkGroupMapper.editCheckGroup(checkGroup);
        // 删除检查组和检查项的关联关系
        checkGroupMapper.deleteCheckGroupAndCheckItem(checkGroup.getId());
        // 添加检查项和检查组之间的关联关系
        addCheckGroupAndCheckItem(checkItemIds, checkGroup);
    }

    /**
     * 查询所有检查组
     */
    @Override
    public List<CheckGroup> queryAll() {
        return checkGroupMapper.queryAll();
    }

    /**
     * 创建方法 保存检查项和检查组之间的关联关系
     * 可以选择map集合 键具有唯一性
     */
    private void addCheckGroupAndCheckItem(Integer[] checkItemIds, CheckGroup checkGroup) {
        //获取检查组id
        Integer id = checkGroup.getId();
        HashMap<String, Integer> map = new HashMap<>();
        for (Integer checkItemId : checkItemIds) {
            map.put("checkgroup_id", id);
            map.put("checkitem_id", checkItemId);
            checkGroupMapper.addCheckGroupAndCheckItem(map);
        }
    }
}
